Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি সম্পর্কিত বিভিন্ন কার্যক্রম সহজ করে তোলে। এর মধ্যে FileFilter এবং DirectoryWalker দুটি গুরুত্বপূর্ণ ক্লাস যা ফাইল এবং ডিরেক্টরি ম্যানিপুলেশন ও ফিল্টারিং কার্যক্রমে ব্যবহৃত হয়।
এখানে আমরা FileFilter এবং DirectoryWalker এর ভূমিকা এবং উদাহরণ নিয়ে বিস্তারিত আলোচনা করব।
FileFilter একটি ইন্টারফেস যা ফাইল সিস্টেমে ফাইল এবং ডিরেক্টরি ফিল্টার করতে ব্যবহৃত হয়। Apache Commons IO এ FileFilter-এর বিভিন্ন বাস্তবায়ন (implementations) রয়েছে, যা নির্দিষ্ট শর্তাবলী অনুসারে ফাইলগুলো নির্বাচন করে।
WildcardFileFilter ব্যবহার করে আপনি একটি প্যাটার্নের ভিত্তিতে ফাইলগুলো ফিল্টার করতে পারেন, যেমন একটি নির্দিষ্ট এক্সটেনশন বা নামের ভিত্তিতে।
import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.FileFilter;
public class FileFilterExample {
public static void main(String[] args) {
File directory = new File("/path/to/directory");
// Create a file filter to find all .txt files
FileFilter filter = new WildcardFileFilter("*.txt");
// List all .txt files in the directory
File[] txtFiles = directory.listFiles(filter);
for (File file : txtFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
WildcardFileFilter
একটি ফাইল ফিল্টার যা .txt
এক্সটেনশনের সব ফাইল খুঁজে বের করতে ব্যবহৃত হয়।listFiles()
মেথডের মাধ্যমে সেই ফাইলগুলো প্রদর্শিত হবে।কিছু সময় আপনাকে একাধিক শর্তের ভিত্তিতে ফাইল ফিল্টার করতে হতে পারে। এর জন্য AndFileFilter
এবং OrFileFilter
ব্যবহার করা যায়।
import org.apache.commons.io.filefilter.AndFileFilter;
import org.apache.commons.io.filefilter.OrFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.FileFilter;
public class ComplexFileFilterExample {
public static void main(String[] args) {
File directory = new File("/path/to/directory");
// Create two file filters
FileFilter txtFilter = new WildcardFileFilter("*.txt");
FileFilter jpgFilter = new WildcardFileFilter("*.jpg");
// Combine filters using AndFileFilter (both conditions must be true)
FileFilter combinedFilter = new AndFileFilter(txtFilter, jpgFilter);
// List all .txt and .jpg files
File[] files = directory.listFiles(combinedFilter);
for (File file : files) {
System.out.println(file.getName());
}
}
}
এখানে:
AndFileFilter
ব্যবহার করে .txt
এবং .jpg
ফাইল উভয় ফিল্টার করা হয়েছে। আপনি এখানে OrFileFilter
ব্যবহার করলে একাধিক শর্তের মধ্যে কোনো একটি শর্ত পূর্ণ হলেই ফাইলটি নির্বাচিত হবে।DirectoryWalker একটি কাস্টম ক্লাস যা আপনাকে একটি ডিরেক্টরি এবং তার সকল সাবডিরেক্টরি ট্রাভার্স (ভ্রমণ) করতে সাহায্য করে। আপনি DirectoryWalker ব্যবহার করে ডিরেক্টরির মধ্যে সমস্ত ফাইল এবং ডিরেক্টরি সম্পর্কিত কাজ করতে পারেন, যেমন ফাইলের প্রক্রিয়াকরণ, ডিরেক্টরি পরিবর্তন ইত্যাদি।
DirectoryWalker একটি abstract ক্লাস, যা সাধারণত DirectoryWalker এর walk()
মেথড দ্বারা ডিরেক্টরি হ্যান্ডলিং এর কাজ সম্পাদন করে।
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.IOException;
public class DirectoryWalkerExample {
public static void main(String[] args) {
try {
// Specify the directory to be walked
File directory = new File("/path/to/directory");
// Use DirectoryWalker to recursively walk through the directory
FileUtils.listFilesAndDirs(directory, FileFilterUtils.trueFileFilter(), DirectoryFileFilter.INSTANCE)
.forEach(file -> System.out.println(file.getAbsolutePath()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
FileUtils.listFilesAndDirs()
মেথডটি ব্যবহার করে DirectoryWalker এর মাধ্যমে directory এবং তার সকল সাব-ডিরেক্টরি ট্রাভার্স করা হচ্ছে। এতে FileFilterUtils.trueFileFilter()
ফাইল ফিল্টার ব্যবহার করা হয়েছে যাতে সমস্ত ফাইল নির্বাচিত হয় এবং DirectoryFileFilter.INSTANCE
ব্যবহার করে সব ডিরেক্টরি নির্বাচন করা হচ্ছে।FileFilter এবং DirectoryWalker এর মধ্যে একটি মৌলিক পার্থক্য হল, FileFilter সাধারণত একক ফাইল ফিল্টারিং করার জন্য ব্যবহৃত হয়, যখন DirectoryWalker ডিরেক্টরি এবং তার উপাদানগুলোকে ট্রাভার্স করার জন্য ব্যবহৃত হয়।
Apache Commons IO এর FileFilter এবং DirectoryWalker ক্লাসগুলি ফাইল এবং ডিরেক্টরি ম্যানিপুলেশন এবং ফিল্টারিংয়ের জন্য অত্যন্ত কার্যকরী। FileFilter আপনাকে ফাইলের মধ্যে শর্তাবলী অনুযায়ী ফিল্টারিং করতে সাহায্য করে, এবং DirectoryWalker ডিরেক্টরি এবং তার উপাদানগুলোকে ট্রাভার্স করে সহজে ফাইল প্রক্রিয়া বা কাস্টম অপারেশন করার সুবিধা দেয়। এই দুটি উপকরণই Java-তে ফাইল সিস্টেমের কার্যক্রমের উন্নতি এবং সহজিকরণে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি সম্পর্কিত কাজের জন্য FileFilter ক্লাস সরবরাহ করে, যা আপনাকে ফাইল ফিল্টার করার জন্য সহজ এবং কার্যকরী উপায় প্রদান করে। FileFilter এর মাধ্যমে আপনি নির্দিষ্ট ফাইলগুলিকে ফিল্টার করতে পারেন যেমন এক্সটেনশন বা নামের উপর ভিত্তি করে। এটি ফাইল সিস্টেমে দ্রুত এবং কার্যকরীভাবে ফাইল নির্বাচন বা ফিল্টার করার জন্য ব্যবহার করা যায়।
FileFilter একটি interface যা accept()
মেথডে ফাইলের জন্য শর্ত বা প্রেডিকেট ব্যবহার করে। আপনি নিজের কাস্টম শর্ত অনুসারে ফাইল ফিল্টার করতে পারেন।
FileFilter সাধারণত FileUtils
বা File
ক্লাসের সাথে ব্যবহৃত হয় এবং নির্দিষ্ট শর্তে ফাইল নির্বাচন বা ফিল্টার করার জন্য এটি সহজ উপায় সরবরাহ করে।
accept()
মেথডকে কাস্টম শর্ত অনুসারে পরিচালনা করবে।listFiles()
মেথডে FileFilter ব্যবহার করে ফাইল ফিল্টার করা সম্ভব।এখানে একটি উদাহরণ দেওয়া হল, যেখানে FileFilter ব্যবহার করে ফাইলের এক্সটেনশন .txt
অনুযায়ী ফিল্টার করা হয়েছে:
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import java.io.File;
import java.io.IOException;
public class FileFilterExample {
public static void main(String[] args) {
// ডিরেক্টরি যেখানে ফাইল ফিল্টার করা হবে
File directory = new File("C:/exampleDirectory");
// FileFilter তৈরি করুন যা .txt এক্সটেনশন সহ ফাইল ফিল্টার করবে
FileFilter fileFilter = FileFilterUtils.suffixFileFilter(".txt");
// FileUtils এর মাধ্যমে ফাইল ফিল্টার করা
File[] filteredFiles = directory.listFiles((FileFilter) fileFilter);
// ফিল্টার করা ফাইলগুলোর নাম প্রিন্ট করা
if (filteredFiles != null) {
for (File file : filteredFiles) {
System.out.println(file.getName());
}
} else {
System.out.println("কোনো .txt ফাইল পাওয়া যায়নি।");
}
}
}
FileFilterUtils.suffixFileFilter(".txt")
: এই মেথডটি একটি ফাইল ফিল্টার তৈরি করে যা .txt
এক্সটেনশনযুক্ত ফাইলগুলিকে ফিল্টার করবে।listFiles()
মেথডের মাধ্যমে নির্দিষ্ট ডিরেক্টরির মধ্যে ফাইল ফিল্টার করা হচ্ছে।filteredFiles
অ্যারে তে শুধু .txt
ফাইল গুলি থাকবে যেগুলি ফিল্টার করা হয়েছে।file1.txt
file2.txt
আপনি আরও কাস্টম ফিল্টারিং শর্ত প্রয়োগ করতে পারেন যেমন ফাইলের আকার, নামের সাথে regex ম্যাচ, বা নির্দিষ্ট ফাইলের অন্তর্ভুক্তি বা অনুপস্থিতি।
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.NameFileFilter;
import java.io.File;
import java.io.IOException;
public class CustomFileFilterExample {
public static void main(String[] args) {
// ডিরেক্টরি যেখানে ফাইল ফিল্টার করা হবে
File directory = new File("C:/exampleDirectory");
// কাস্টম ফাইল ফিল্টার তৈরি (নাম অনুযায়ী ফিল্টার)
IOFileFilter fileFilter = new NameFileFilter("example");
// FileUtils এর মাধ্যমে কাস্টম ফিল্টার প্রয়োগ করা
File[] filteredFiles = directory.listFiles((IOFileFilter) fileFilter);
// ফিল্টার করা ফাইলগুলোর নাম প্রিন্ট করা
if (filteredFiles != null) {
for (File file : filteredFiles) {
System.out.println(file.getName());
}
} else {
System.out.println("কোনো ফাইল পাওয়া যায়নি।");
}
}
}
NameFileFilter
ফাইল নামের সাথে নির্দিষ্ট টেক্সট মেলা (matching) করতে ব্যবহৃত হয়। এখানে "example" শব্দ দিয়ে ফিল্টার করা হচ্ছে, যাতে শুধুমাত্র "example" নামের ফাইলগুলি ফিল্টার হবে।exampleFile1.txt
exampleImage.jpg
.txt
, .jpg
, ইত্যাদি।Apache Commons IO এর FileFilter ক্লাসটি আপনাকে ফাইল ফিল্টারিংয়ের জন্য শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে। আপনি FileFilterUtils ব্যবহার করে সহজেই এক্সটেনশন, নাম, সাইজ বা অন্যান্য শর্তে ফাইল ফিল্টার করতে পারেন। Apache Commons IO লাইব্রেরির এই ফিচারগুলি ফাইল সিস্টেমের সাথে কাজ করার সময় ডেভেলপারদের জন্য অনেক সহায়ক।
Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি ম্যানিপুলেশনের জন্য অনেক কার্যকরী ইউটিলিটি সরবরাহ করে, যার মধ্যে Wildcard এবং Regex ব্যবহার করে ফাইল ফিল্টার করা অন্যতম। এই ফিচারটি ফাইল সিস্টেমে নির্দিষ্ট প্যাটার্ন বা কন্ডিশন অনুসারে ফাইলগুলো চয়ন করতে সহায়তা করে। এটি বিশেষ করে বড় ডিরেক্টরি বা ফাইল সিস্টেমে কাজ করার সময়ে খুবই উপকারী।
Wildcard এবং Regex এর মাধ্যমে ফাইল ফিল্টার করা হলে, আপনি নির্দিষ্ট ফাইল এক্সটেনশন, নাম বা অন্যান্য প্যাটার্নের ভিত্তিতে ফাইলগুলো ফিল্টার করতে পারবেন।
Wildcard সাধারণত ফাইল নামের অংশের সাথে ম্যাচ করার জন্য ব্যবহৃত হয়, যেখানে বিশেষ চিহ্ন যেমন *
(যেকোনো সংখ্যক অক্ষর) এবং ?
(একটি অক্ষর) ব্যবহার করা হয়।
WildcardFileFilter ক্লাস Apache Commons IO তে একটি ফাইল ফিল্টার ক্লাস, যা ওয়াইল্ডকার্ড প্যাটার্নের মাধ্যমে ফাইল ফিল্টার করতে সহায়তা করে।
import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.FileFilter;
public class WildcardFileFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create a FileFilter using Wildcard to filter files with .txt extension
FileFilter fileFilter = new WildcardFileFilter("*.txt");
// Get all .txt files in the directory
File[] textFiles = directory.listFiles(fileFilter);
// Print the file names
for (File file : textFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
.txt
এক্সটেনশনের ফাইলগুলো ফিল্টার করেছি।*
চিহ্ন ব্যবহার করা হয়েছে যাতে সমস্ত .txt
ফাইল নির্বাচন করা যায়, যেগুলোর নাম যেকোনো হতে পারে।*.jpg
: সকল JPEG ছবি ফাইল।file?.txt
: যেসব ফাইলের নাম file1.txt, file2.txt ইত্যাদি হয়।report*
: যে কোনো ফাইল যার নাম report দিয়ে শুরু হয়।Regex (Regular Expression) ব্যবহার করে আপনি আরও জটিল প্যাটার্নের মাধ্যমে ফাইল নাম ফিল্টার করতে পারেন। RegexFileFilter ক্লাস Apache Commons IO তে রয়েছে, যা আপনাকে regular expressions এর মাধ্যমে ফাইল ফিল্টার করার সুযোগ দেয়।
import org.apache.commons.io.filefilter.RegexFileFilter;
import java.io.File;
import java.io.FileFilter;
public class RegexFileFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create a FileFilter using Regex to filter files that start with 'report' and end with .txt
FileFilter fileFilter = new RegexFileFilter("^report.*\\.txt$");
// Get all files matching the regex pattern
File[] reportFiles = directory.listFiles(fileFilter);
// Print the file names
for (File file : reportFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
^
এবং $
হল regex এর বর্ডার চিহ্ন, যেগুলি ফাইল নামের শুরু এবং শেষের সাথে মিলে।^report.*\\.txt$
: ফাইল নামের শুরুতে report এবং শেষের দিকে .txt থাকতে হবে।.*\\.jpg$
: যেকোনো ফাইল যার এক্সটেনশন .jpg।^file[0-9]+\\.txt$
: ফাইল নামের শুরুতে file এবং পরবর্তীতে এক বা একাধিক ডিজিট থাকতে হবে এবং ফাইলের এক্সটেনশন .txt হতে হবে।আপনি Wildcard এবং Regex ফিল্টার একসাথে ব্যবহার করতে পারেন, যেমন ফাইলের নামের একটি অংশ ওয়াইল্ডকার্ড প্যাটার্ন দিয়ে এবং আরেকটি অংশ regex প্যাটার্ন দিয়ে ফিল্টার করা।
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;
import java.io.FileFilter;
public class CombinedFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create WildcardFileFilter to filter files with '.txt' extension
IOFileFilter wildcardFilter = new WildcardFileFilter("*.txt");
// Create RegexFileFilter to filter files starting with 'report' and ending with '.txt'
IOFileFilter regexFilter = new RegexFileFilter("^report.*\\.txt$");
// Combine both filters
IOFileFilter combinedFilter = IOFileFilter.and(wildcardFilter, regexFilter);
// Get all files matching both filters
File[] filteredFiles = directory.listFiles((FileFilter) combinedFilter);
// Print the file names
for (File file : filteredFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
IOFileFilter.and()
পদ্ধতি ব্যবহার করে উভয় ফিল্টার একসাথে প্রয়োগ করা হয়েছে।ধরা যাক, আপনি একটি ডিরেক্টরিতে থাকা .txt এবং .csv এক্সটেনশনের ফাইলগুলো ফিল্টার করতে চান, যেগুলোর নাম log দিয়ে শুরু এবং একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে।
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;
public class MultiplePatternsExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create WildcardFileFilter to filter files with .txt and .csv extension
IOFileFilter wildcardFilter = new WildcardFileFilter("*.{txt,csv}");
// Create RegexFileFilter to filter files starting with 'log' and containing '2021'
IOFileFilter regexFilter = new RegexFileFilter("^log.*2021.*");
// Combine both filters
IOFileFilter combinedFilter = IOFileFilter.and(wildcardFilter, regexFilter);
// Get all files matching both filters
File[] filteredFiles = directory.listFiles((FileFilter) combinedFilter);
// Print the filtered file names
for (File file : filteredFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
Apache Commons IO লাইব্রেরি দিয়ে Wildcard এবং Regex ব্যবহার করে আপনি সহজে ফাইল সিস্টেমে ফিল্টারিং করতে পারেন। WildcardFileFilter এবং RegexFileFilter ক্লাসগুলির মাধ্যমে আপনি নির্দিষ্ট প্যাটার্ন বা এক্সটেনশনের ভিত্তিতে ফাইলগুলো নির্বাচন করতে পারেন। একাধিক ফিল্টারকে একত্রিত (combine) করে আরও কাস্টমাইজড ফিল্টারিংও করা সম্ভব। এই ফিচারটি বিশেষভাবে কার্যকরী যখন ডিরেক্টরি বা ফাইল সিস্টেমে বড় ডেটাসেট থাকে এবং নির্দিষ্ট প্যাটার্ন অনুযায়ী ফাইল নির্বাচন করতে হয়।
Apache Commons IO লাইব্রেরি DirectoryWalker ক্লাস সরবরাহ করে, যা একটি ডিরেক্টরি এবং তার ভিতরের ফাইল এবং সাব-ডিরেক্টরি রিকার্সিভলি ট্রাভার্স (ভ্রমণ) করতে সহায়ক। এটি ডিরেক্টরি ট্রাভার্সাল, ফাইল এবং সাব-ডিরেক্টরি প্রসেসিং ইত্যাদি কাজগুলির জন্য খুবই কার্যকরী।
DirectoryWalker সাধারণত কাস্টম ডিরেক্টরি প্রসেসিং কাজের জন্য ব্যবহৃত হয়, যেখানে আপনাকে ডিরেক্টরি এবং ফাইলগুলো কাস্টম শর্তে ফিল্টার করতে বা প্রক্রিয়া করতে হয়।
DirectoryWalker হল একটি বিমূর্ত (abstract) ক্লাস যা directory traversal এর জন্য ব্যবহৃত হয়। এটি সাধারণত একটি ডিরেক্টরি এবং তার ভিতরের সমস্ত ফাইল ও সাব-ডিরেক্টরি রিকার্সিভভাবে ট্রাভার্স করার জন্য ব্যবহৃত হয়। DirectoryWalker এ দুটি প্রধান মেথড থাকে:
DirectoryWalker কে ব্যবহার করতে, আপনাকে এই ক্লাসটি ইমপ্লিমেন্ট করতে হবে এবং আপনার প্রয়োজনীয় handleFile() এবং handleDirectory() মেথডগুলো কাস্টমাইজ করতে হবে।
DirectoryWalker ব্যবহার করার জন্য আপনাকে একটি কাস্টম ক্লাস তৈরি করতে হবে যা DirectoryWalker ক্লাসটিকে এক্সটেন্ড করবে এবং তার মধ্যে ফাইল এবং ডিরেক্টরি প্রসেসিংয়ের জন্য উপযুক্ত মেথড ইমপ্লিমেন্ট করতে হবে।
DirectoryWalker এর মাধ্যমে একটি ডিরেক্টরি ট্রাভার্স করার জন্য একটি কাস্টম ক্লাস তৈরি করা যেতে পারে, যেখানে আপনি handleFile() এবং handleDirectory() মেথডগুলোকে কাস্টমাইজ করবেন।
উদাহরণ: DirectoryWalker দিয়ে ডিরেক্টরি ট্রাভার্স করা
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.DirectoryWalker;
import java.io.File;
import java.io.IOException;
public class CustomDirectoryWalker extends DirectoryWalker {
// কনস্ট্রাক্টর
public CustomDirectoryWalker(IOFileFilter fileFilter, IOFileFilter directoryFilter) {
super(fileFilter, directoryFilter);
}
// handleFile() মেথডটি ফাইল প্রসেস করতে ব্যবহৃত হয়
@Override
protected void handleFile(File file, int depth, java.util.List<File> results) throws IOException {
System.out.println("File: " + file.getAbsolutePath());
}
// handleDirectory() মেথডটি সাব-ডিরেক্টরি প্রসেস করতে ব্যবহৃত হয়
@Override
protected void handleDirectory(File directory, int depth, java.util.List<File> results) throws IOException {
System.out.println("Directory: " + directory.getAbsolutePath());
}
public static void main(String[] args) throws IOException {
// ডিরেক্টরি এবং ফাইল ফিল্টার
File rootDirectory = new File("path/to/directory");
IOFileFilter fileFilter = TrueFileFilter.TRUE; // সকল ফাইলকে অন্তর্ভুক্ত করবে
IOFileFilter directoryFilter = TrueFileFilter.TRUE; // সকল ডিরেক্টরিকে অন্তর্ভুক্ত করবে
// CustomDirectoryWalker ক্লাসের অবজেক্ট তৈরি
CustomDirectoryWalker walker = new CustomDirectoryWalker(fileFilter, directoryFilter);
// ডিরেক্টরি ট্রাভার্স করা
walker.walk(rootDirectory, null);
}
}
আউটপুট:
Directory: /path/to/directory
File: /path/to/directory/file1.txt
File: /path/to/directory/file2.txt
Directory: /path/to/directory/subdir
File: /path/to/directory/subdir/file3.txt
এখানে:
DirectoryWalker এ FileFilter এবং DirectoryFilter ব্যবহার করে আপনি ফাইল এবং ডিরেক্টরি ফিল্টারিং করতে পারেন, যেমন শুধুমাত্র নির্দিষ্ট ধরনের ফাইল বা ডিরেক্টরি প্রসেস করা।
উদাহরণ: শুধুমাত্র .txt
ফাইল প্রসেস করা
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.io.DirectoryWalker;
import java.io.File;
import java.io.IOException;
public class CustomDirectoryWalker extends DirectoryWalker {
public CustomDirectoryWalker() {
super(FileFilterUtils.suffixFileFilter(".txt"), TrueFileFilter.TRUE);
}
@Override
protected void handleFile(File file, int depth, java.util.List<File> results) throws IOException {
System.out.println("Text File: " + file.getAbsolutePath());
}
@Override
protected void handleDirectory(File directory, int depth, java.util.List<File> results) throws IOException {
System.out.println("Directory: " + directory.getAbsolutePath());
}
public static void main(String[] args) throws IOException {
File rootDirectory = new File("path/to/directory");
CustomDirectoryWalker walker = new CustomDirectoryWalker();
walker.walk(rootDirectory, null);
}
}
আউটপুট:
Directory: /path/to/directory
Text File: /path/to/directory/file1.txt
Text File: /path/to/directory/file2.txt
Directory: /path/to/directory/subdir
Text File: /path/to/directory/subdir/file3.txt
এখানে:
.txt
এক্সটেনশনযুক্ত ফাইলগুলোকেই ট্রাভার্স করার জন্য ফিল্টার করা হয়েছে।.txt
ফাইলগুলির উপর কাজ করবে এবং তাদের পাথ প্রিন্ট করবে।Apache Commons IO এর DirectoryWalker ক্লাস ডিরেক্টরি এবং ফাইলের সাথে কাজ করার সময় আরও আধুনিক এবং কার্যকরী পদ্ধতি সরবরাহ করে, যা কোডকে আরও পরিষ্কার এবং রক্ষণাবেক্ষণের জন্য সহজ করে তোলে।
Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি সম্পর্কিত বিভিন্ন কার্যকলাপ সহজ এবং কার্যকরী করে তোলে। Recursive Directory Traversing এবং Custom Directory Walking দুটি গুরুত্বপূর্ণ কাজ, যেখানে একটি ডিরেক্টরির মধ্যে সব ফাইল বা সাবডিরেক্টরি অনুসন্ধান করা হয়, এবং যখন আমাদের কাস্টম লজিক বা ফিল্টারিং প্রয়োজন।
এই কাজগুলো সাধারণত ফাইল সিস্টেম থেকে ডেটা এক্সট্র্যাক্ট বা ম্যানিপুলেট করার জন্য ব্যবহৃত হয়। Apache Commons IO লাইব্রেরি FileUtils এবং DirectoryWalker ক্লাস সরবরাহ করে, যেগুলি রিকর্সিভ ডিরেক্টরি ট্রাভার্সিং এবং কাস্টম ডিরেক্টরি ওয়াকিং (directory walking) করতে ব্যবহৃত হয়।
FileUtils
ক্লাসের সাহায্যে সহজেই রিকর্সিভ ডিরেক্টরি ট্রাভার্সিং করা সম্ভব। FileUtils.listFiles()
মেথডটি রিকর্সিভভাবে ডিরেক্টরি এবং সাবডিরেক্টরিগুলির মধ্যে ফাইলগুলোকে একটি তালিকায় যুক্ত করে।
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
public class RecursiveDirectoryTraversingExample {
public static void main(String[] args) {
File directory = new File("path/to/your/directory");
// .txt এক্সটেনশন সহ সব ফাইল লিস্ট করতে রিকর্সিভ ফাইল লিস্টিং
Collection<File> files = FileUtils.listFiles(directory, new String[] {"txt"}, true);
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
}
FileUtils.listFiles(directory, new String[] {"txt"}, true)
মেথডটি ডিরেক্টরি এবং তার সাবডিরেক্টরিগুলির মধ্যে .txt
এক্সটেনশন সহ সমস্ত ফাইল রিকর্সিভভাবে খুঁজে বের করে।true
বলে যে এটি রিকর্সিভভাবে ডিরেক্টরি ট্রাভার্স করবে।যখন আপনি কাস্টম লজিক ব্যবহার করে ডিরেক্টরি ট্রাভার্স করতে চান, তখন DirectoryWalker
ক্লাসটি খুবই উপকারী। এটি আপনাকে ডিরেক্টরি এবং ফাইলের প্রতি কাস্টম আচরণ নির্ধারণ করতে দেয়।
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
public class CustomDirectoryWalkingExample {
public static void main(String[] args) {
File directory = new File("path/to/your/directory");
// ডিরেক্টরি ওয়াকিং কাস্টম ফিল্টার ব্যবহার করে
Iterator<File> iterator = FileUtils.iterateFiles(directory, FileFilterUtils.suffixFileFilter(".txt"), TrueFileFilter.TRUE);
while (iterator.hasNext()) {
File file = iterator.next();
// কাস্টম লজিক প্রয়োগ
System.out.println("Processing file: " + file.getAbsolutePath());
}
}
}
FileUtils.iterateFiles(directory, FileFilterUtils.suffixFileFilter(".txt"), TrueFileFilter.TRUE)
মেথডটি .txt
এক্সটেনশন সহ সমস্ত ফাইল ডিরেক্টরি এবং তার সাবডিরেক্টরিগুলির মধ্যে খুঁজে বের করে।FileFilterUtils.suffixFileFilter(".txt")
ফিল্টার ব্যবহার করে শুধুমাত্র .txt
এক্সটেনশন সহ ফাইলগুলিকে নির্বাচিত করা হয়েছে।TrueFileFilter.TRUE
সব ফাইল এবং ডিরেক্টরিকে ফিল্টার হিসেবে গ্রহণ করে (এটি কাস্টম ফিল্টার নির্ধারণে সাহায্য করতে পারে)।DirectoryWalker
ক্লাস আরও কাস্টমাইজড এবং উন্নত ডিরেক্টরি ট্রাভার্সিংয়ের জন্য ব্যবহৃত হয়। এই ক্লাসের মাধ্যমে আপনি ফাইল এবং ডিরেক্টরি ট্রাভার্স করার জন্য নিজস্ব কাস্টম লজিক সংজ্ঞায়িত করতে পারেন।
DirectoryWalker
ইমপ্লিমেন্টেশনimport org.apache.commons.io.DirectoryWalker;
import java.io.File;
import java.io.IOException;
public class CustomDirectoryWalkerExample extends DirectoryWalker {
public CustomDirectoryWalkerExample() {
// কাস্টম ইমপ্লিমেন্টেশনের জন্য প্রয়োজনীয় কন্সট্রাক্টর
}
@Override
protected void handleFile(File file, int depth) {
// কাস্টম লজিক যা ফাইলের উপর প্রয়োগ হবে
System.out.println("Processing file: " + file.getAbsolutePath());
}
@Override
protected void handleDirectory(File directory, int depth) {
// কাস্টম লজিক যা ডিরেক্টরির উপর প্রয়োগ হবে
System.out.println("Entering directory: " + directory.getAbsolutePath());
}
public static void main(String[] args) throws IOException {
File directory = new File("path/to/your/directory");
// DirectoryWalker এর কাস্টম ইমপ্লিমেন্টেশন ব্যবহার করা
CustomDirectoryWalkerExample walker = new CustomDirectoryWalkerExample();
walker.walk(directory, null); // `null` pass করা হয় কারণ এখানে ফিল্টার ব্যবহার করা হয়নি
}
}
handleFile(File file, int depth)
: এই মেথডটি কাস্টম লজিক প্রয়োগ করতে ব্যবহৃত হয়, যা প্রতিটি ফাইলের জন্য চলে।handleDirectory(File directory, int depth)
: এই মেথডটি ডিরেক্টরি ট্রাভার্স করার সময় প্রতিটি ডিরেক্টরির জন্য চলে।DirectoryWalker
অত্যন্ত শক্তিশালী এবং কাস্টম ডিরেক্টরি ওয়াকিংয়ের জন্য ব্যবহার করা হয়, যেখানে আপনি ফাইল এবং ডিরেক্টরি সম্পর্কিত নিজের লজিক প্রয়োগ করতে পারেন।
Recursive Directory Traversing এবং Custom Directory Walking অ্যাপাচি কমন্স আইও লাইব্রেরির দুটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা ফাইল সিস্টেমে ডিরেক্টরি ট্রাভার্সিং এবং ফাইলের প্রক্রিয়াকরণের কাজগুলো সহজ করে তোলে।
এই দুটি পদ্ধতির মাধ্যমে আপনি জটিল ফাইল সিস্টেমের কাজগুলো খুব সহজে এবং কার্যকরীভাবে পরিচালনা করতে পারবেন।
common.read_more